package com.mezz.bones.framework.base.util;

import lombok.extern.slf4j.Slf4j;

import java.util.function.Supplier;

/**
 * @Author: zhuang
 * @Date: 2024/12/20 10:27
 * @Description: TODO
 * @Version: 1.0
 **/
@Slf4j
public class ExecutionTimeLoggerUtil {

    /**
     * 通用方法，用于记录函数的执行时间并输出日志。
     *
     * @param actionName 描述该操作的名称，用于日志记录。
     * @param function   要执行的方法，使用 Supplier 表示。
     * @param <T>        方法返回值的类型。
     * @return 方法的执行结果。
     */
    public static <T> T logExecutionTime(String actionName, Supplier<T> function) {
        long startTime = System.currentTimeMillis(); // 记录开始时间

        T result = function.get(); // 执行函数

        long endTime = System.currentTimeMillis(); // 记录结束时间

        long executionTime = endTime - startTime; // 计算执行时间

        // 打印日志
        log.info(String.format("Action '%s' executed in %.2f seconds", actionName, executionTime / 1000.0));

        return result; // 返回函数结果
    }

    public static void logExecutionTime(String actionName, Runnable action) {
        long startTime = System.currentTimeMillis(); // 记录开始时间

        action.run(); // 执行动作

        long endTime = System.currentTimeMillis(); // 记录结束时间

        long executionTime = endTime - startTime; // 计算执行时间

        // 打印日志
        log.info(String.format("Action '%s' executed in %.2f seconds", actionName, executionTime / 1000.0));
    }
}

